<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=2"><meta name="theme-color" content="#FFF"><meta name="baidu-site-verification" content="code-DvHFUp3jdk"><meta name="baidu-site-verification" content="code-eHnRZZHAeP"><meta name="baidu-site-verification" content="code-EmlZBboqEW"><meta name="baidu-site-verification" content="code-Hf9ZXEHZ41"><meta name="360-site-verification" content="941073b91e9afaf02748ba000ba47e80"><meta name="360-site-verification" content="010bd45f0d523ce46f298dd597ef0289"><meta name="sogou_site_verification" content="hlLPNfmIjv"><meta name="sogou_site_verification" content="y3La2dTB20"><meta name="msvalidate.01" content="03829B28CC46A7AA4B5503897F475BA1"><script>!function(){var s="https://s.ssl.qhres2.com/ssl/ab77b6ea7f3fbf79.js";document.write('<script src="'+s+'" id="sozz"><\/script>')}()</script><script>!function(t,e,c,n,r,a,s){t[c]=t[c]||function(){(t[c].q=t[c].q||[]).push(arguments)},a=e.createElement(n),a.async=1,a.src="https://www.clarity.ms/tag/"+r+"?ref=bwt",s=e.getElementsByTagName(n)[0],s.parentNode.insertBefore(a,s)}(window,document,"clarity","script","8xwpfccwj2")</script><script>var _hmt=_hmt||[];!function(){var e=document.createElement("script");e.src="https://hm.baidu.com/hm.js?1d318b0509ca0909017253ed6f659ae4";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)}()</script><script>var _hmt=_hmt||[];!function(){var e=document.createElement("script");e.src="https://hm.baidu.com/hm.js?aea6c1471d6299bdd1c87a0836f18675";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)}()</script><script>var _hmt=_hmt||[];!function(){var e=document.createElement("script");e.src="https://hm.baidu.com/hm.js?498ca413655655a62058d6b5d7c62786";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)}()</script><script>var _hmt=_hmt||[];!function(){var e=document.createElement("script");e.src="https://hm.baidu.com/hm.js?e19e8161e13f718806b79f49240583b4";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)}()</script><link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png"><link rel="icon" type="image/ico" sizes="32x32" href="/images/favicon.ico"><meta http-equiv="Cache-Control" content="no-transform"><meta http-equiv="Cache-Control" content="no-siteapp"><meta name="google-site-verification" content="UA-139249935-1"><meta name="baidu-site-verification" content="cOtBu9CtTEIuwJeN"><link rel="alternate" type="application/rss+xml" title="了尘兰若的小坑" href="https://liaochenlanruo.gitee.io/rss.xml"><link rel="alternate" type="application/atom+xml" title="了尘兰若的小坑" href="https://liaochenlanruo.gitee.io/atom.xml"><link rel="alternate" type="application/json" title="了尘兰若的小坑" href="https://liaochenlanruo.gitee.io/feed.json"><link rel="stylesheet" href="//fonts.googleapis.com/css?family=Mulish:300,300italic,400,400italic,700,700italic%7CFredericka%20the%20Great:300,300italic,400,400italic,700,700italic%7CNoto%20Serif%20JP:300,300italic,400,400italic,700,700italic%7CNoto%20Serif%20SC:300,300italic,400,400italic,700,700italic%7CInconsolata:300,300italic,400,400italic,700,700italic&display=swap&subset=latin,latin-ext"><link rel="stylesheet" href="/css/app.css?v=0.2.5"><meta name="keywords" content="Functional genomics,SY179,WGS,生信软件"><link rel="canonical" href="https://liaochenlanruo.gitee.io/post/c886.html"><title>SignalP+TMHMM预测微生物分泌蛋白 - 生物信息 | ResearchGo = 了尘兰若的小坑 = liaochenlanruo</title><meta name="generator" content="Hexo 5.4.0"></head><body itemscope itemtype="http://schema.org/WebPage"><div id="loading"><div class="cat"><div class="body"></div><div class="head"><div class="face"></div></div><div class="foot"><div class="tummy-end"></div><div class="bottom"></div><div class="legs left"></div><div class="legs right"></div></div><div class="paw"><div class="hands left"></div><div class="hands right"></div></div></div></div><div id="container"><header id="header" itemscope itemtype="http://schema.org/WPHeader"><div class="inner"><div id="brand"><div class="pjax"><h1 itemprop="name headline">SignalP+TMHMM预测微生物分泌蛋白</h1><div class="meta"><span class="item" title="Created: 2021-10-14 09:09:45"><span class="icon"><i class="ic i-calendar"></i> </span><span class="text">Posted on</span> <time itemprop="dateCreated datePublished" datetime="2021-10-14T09:09:45+08:00">2021-10-14</time> </span><span class="item" title="Symbols count in article"><span class="icon"><i class="ic i-pen"></i> </span><span class="text">Symbols count in article</span> <span>9.4k</span> <span class="text">words</span> </span><span class="item" title="Reading time"><span class="icon"><i class="ic i-clock"></i> </span><span class="text">Reading time</span> <span>9 mins.</span></span></div></div></div><nav id="nav"><div class="inner"><div class="toggle"><div class="lines" aria-label="Toggle navigation bar"><span class="line"></span> <span class="line"></span> <span class="line"></span></div></div><ul class="menu"><li class="item title"><a href="/" rel="start">ResearchGo</a></li></ul><ul class="right"><li class="item theme"><i class="ic i-sun"></i></li><li class="item search"><i class="ic i-search"></i></li></ul></div></nav></div><div id="imgs" class="pjax"><img src="https://fastly.jsdelivr.net/gh/liaochenlanruo/cdn@master/img/custom/bgs/F01_bin.1_00110.gif"></div></header><div id="waves"><svg class="waves" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 24 150 28" preserveAspectRatio="none" shape-rendering="auto"><defs><path id="gentle-wave" d="M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z"/></defs><g class="parallax"><use xlink:href="#gentle-wave" x="48" y="0"/><use xlink:href="#gentle-wave" x="48" y="3"/><use xlink:href="#gentle-wave" x="48" y="5"/><use xlink:href="#gentle-wave" x="48" y="7"/></g></svg></div><main><div class="inner"><div id="main" class="pjax"><div class="article wrap"><div class="breadcrumb" itemscope itemtype="https://schema.org/BreadcrumbList"><i class="ic i-home"></i> <span><a href="/">Home</a></span><i class="ic i-angle-right"></i> <span class="current" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"><a href="/categories/Bioinformatics/" itemprop="item" rel="index" title="In 生物信息"><span itemprop="name">生物信息</span></a><meta itemprop="position" content="1"></span></div><article itemscope itemtype="http://schema.org/Article" class="post block" lang="en"><link itemprop="mainEntityOfPage" href="https://liaochenlanruo.gitee.io/post/c886.html"><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="image" content="/images/head.jpg"><meta itemprop="name" content="Hualin Liu"><meta itemprop="description" content="liaochenlanruo, 分享微生物生物信息学分析方法，欢迎加入QQ群交流945751012，不接受群内广告！"></span><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="了尘兰若的小坑"></span><div class="body md" itemprop="articleBody"><div class="gallery" itemscope itemtype="http://schema.org/ImageGallery"><img data-src="https://fastly.jsdelivr.net/gh/liaochenlanruo/cdn@master/img/custom/bgs/F01_bin.1_00110.gif" itemprop="contentUrl"></div><p>Subtitle: Predict Secretory Protein in microbes with SignalP and TMHMM</p><p><ruby>分泌蛋白<rt>Secretory Protein</rt></ruby>是指在细胞内合成后，分泌到细胞外起作用的蛋白质。分泌蛋白的 N 端有一般由 15～30 个氨基酸组成的信号肽。信号肽是引导新合成的蛋白质向分泌通路转移的短（长度 5-30 个氨基酸）肽链。常指新合成多肽链中用于指导蛋白质的跨膜转移（定位）的 N - 末端的氨基酸序列（有时不一定在 N 端）。<u>使用<strong> SignalP</strong> 注释蛋白序列是否含有信号肽结构，使用<strong> TMHMM</strong> 注释蛋白序列是否含有跨膜结构，最终筛选出含有信号肽结构并且不含跨膜结构的蛋白为分泌蛋白</u>。</p><h1 id="ruby软件-rtsoftwarertruby"><a class="anchor" href="#ruby软件-rtsoftwarertruby">#</a><ruby>软件 <rt>Software</rt></ruby></h1><ul><li><p><span class="exturl" data-url="aHR0cHM6Ly9zZXJ2aWNlcy5oZWFsdGh0ZWNoLmR0dS5kay9zZXJ2aWNlLnBocD9TaWduYWxQLTYuMA==">SignalP V6.0</span></p></li><li><p>SignalP 6.0<ruby>预测来自古细菌、革兰氏阳性细菌、革兰氏阴性细菌和真核生物的蛋白质中存在的信号肽<rt>predicts signal peptides and the location of their cleavage sites in proteins from Archaea, Gram-positive Bacteria,</rt></ruby><ruby>及其切割位点的位置。<rt>Gram-negative Bacteria and Eukarya.</rt></ruby><ruby>在细菌和古细菌中，SignalP 6.0 可以区分五种类型的信号肽：<rt>In Bacteria and Archaea, SignalP 6.0 can discriminate between five types of signal peptides:</rt></ruby></p><ul><li><p>Sec/SPI：<ruby>由 Sec 转座转运，并由信号肽酶 I (Lep) 切割的 “标准” 分泌信号肽；<rt>&quot;Standard&quot; secretory signal peptides transported by Sec translocon and cleaved by Signal Peptidase I (Lep).</rt></ruby></p></li><li><p>Sec/SPII：<ruby>由 Sec 转座子运输，并由信号肽酶 II (Lsp) 切割的脂蛋白信号肽；<rt>lipoprotein signal peptides transported by the Sec translocon and cleaved by Signal Peptidase II (Lsp).</rt></ruby></p></li><li><p>Tat/SPI：<ruby>由 Tat 转座子转运，并由信号肽酶 I (Lep) 切割的 Tat 信号肽；<rt>Tat signal peptides transported by the Tat translocon and cleaved by Signal Peptidase I (Lep).</rt></ruby></p></li><li><p>Tat/SPII：<ruby>由 Tat 转位子转运，并由信号肽酶 II (Lsp) 切割的 Tat 脂蛋白信号肽；<rt>Tat lipoprotein signal peptides transported by Tat translocon &amp; cleaved by Signal Peptidase II (Lsp).</rt></ruby></p></li><li><p>Sec/SPIII：<ruby>由 Sec 转位子运输，并由信号肽酶 III (PilD/PibD) 切割的菌毛蛋白和菌毛蛋白样信号肽。<rt>Pilin &amp; pilin-like signal peptides transported by Sec translocon &amp; cleaved by Signal Peptidase III (PilD/PibD).</rt></ruby></p></li><li><p><ruby>此外，SignalP 6.0 预测信号肽的区域。<rt>Additionally, SignalP 6.0 predicts the regions of signal peptides.</rt></ruby><ruby>根据类型，预测 n、h 和 c 区域以及其他显着特征的位置。<rt>Depending on the type, the positions of n-, h- and c-regions as well as of other distinctive features are predicted.</rt></ruby></p></li></ul></li><li><p><span class="exturl" data-url="aHR0cHM6Ly9zZXJ2aWNlcy5oZWFsdGh0ZWNoLmR0dS5kay9zZXJ2aWNlLnBocD9UTUhNTS0yLjA=">TMHMM V2.0c</span></p><ul><li>用于预测蛋白质中的跨膜螺旋。</li></ul></li><li><p>Python</p></li></ul><p>SignalP 和 TMHMM 对于学术用户免费，但是需要填写相关信息和邮箱，以接收下载链接（4h 有效时间）。</p><h1 id="ruby软件安装-rtinstallation-of-softwaresrtruby"><a class="anchor" href="#ruby软件安装-rtinstallation-of-softwaresrtruby">#</a><ruby>软件安装 <rt>Installation of Softwares</rt></ruby></h1><h2 id="安装signalp-60"><a class="anchor" href="#安装signalp-60">#</a> 安装 SignalP 6.0</h2><ul><li><p>下载</p><p>访问<span class="exturl" data-url="aHR0cHM6Ly9zZXJ2aWNlcy5oZWFsdGh0ZWNoLmR0dS5kay9zZXJ2aWNlLnBocD9TaWduYWxQLTYuMA=="> SignalP V6.0</span> 网站，找到 “Download”，填写相关信息，获取下载链接，下载得到 “signalp-6.0.fast.tar.gz”。有两个模式可以选择 ——“slow_sequential” 和 “fast&quot;。前者 runs the full model sequentially, taking the same amount of RAM as <code>fast</code> but being 6 times slower；后者 uses a smaller model that approximates the performance of the full model, requiring a fraction of the resources and being significantly faste。本教程下载的是 fast 模式。</p></li><li><p><ruby>安装 <rt>Installation</rt></ruby></p><ul><li><p><ruby>安装依赖 <rt>Dependencies</rt></ruby></p><ul><li><p>Python</p></li><li><p>matplotlib&gt;3.3.2</p></li><li><p>numpy&gt;1.19.2</p></li><li><p>torch&gt;1.7.0</p><figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre>pip <span class="token function">install</span> torch</pre></td></tr></table></figure></li><li><p>tqdm&gt;4.46.1</p></li></ul></li><li><p>安装 SignalP 6.0</p><figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token comment"># 解压缩安装文件</span></pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token function">tar</span> zxvf signalp-6.0.fast.tar.gz</pre></td></tr><tr><td data-num="3"></td><td><pre></pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token comment"># 进入解压后的软件目录，在终端运行</span></pre></td></tr><tr><td data-num="5"></td><td><pre>python setup.py <span class="token function">install</span></pre></td></tr><tr><td data-num="6"></td><td><pre></pre></td></tr><tr><td data-num="7"></td><td><pre><span class="token comment"># 测试安装</span></pre></td></tr><tr><td data-num="8"></td><td><pre>signalp6 --help</pre></td></tr></table></figure></li></ul></li></ul><h2 id="安装tmhmm-v20c"><a class="anchor" href="#安装tmhmm-v20c">#</a> 安装 TMHMM V2.0c</h2><ul><li><p>下载</p><p>访问<span class="exturl" data-url="aHR0cHM6Ly9zZXJ2aWNlcy5oZWFsdGh0ZWNoLmR0dS5kay9zZXJ2aWNlLnBocD9UTUhNTS0yLjA="> TMHMM V2.0c</span> 网站，找到 “Download”，填写相关信息，获取下载链接，下载得到 “tmhmm-2.0c.Linux.tar.gz”。</p></li><li><p>安装</p><figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token comment"># 解压缩</span></pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token function">tar</span> zxvf tmhmm-2.0c.Linux.tar.gz</pre></td></tr><tr><td data-num="3"></td><td><pre></pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token comment"># 进入解压后的目录</span></pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token builtin class-name">cd</span> tmhmm-2.0c</pre></td></tr><tr><td data-num="6"></td><td><pre></pre></td></tr><tr><td data-num="7"></td><td><pre><span class="token comment"># 获取当前路径，我的是 “/home/liu/tools/tmhmm-2.0c/bin”</span></pre></td></tr><tr><td data-num="8"></td><td><pre><span class="token builtin class-name">pwd</span></pre></td></tr><tr><td data-num="9"></td><td><pre></pre></td></tr><tr><td data-num="10"></td><td><pre><span class="token comment"># 将该路径加入到系统的环境变量中，参考我之前的文章来（编辑～/.bashrc）https://liaochenlanruo.github.io/post/f6c9.html#% E6% B7% BB% E5%8A% A0% E7%8E% AF% E5% A2%83% E5%8F%98% E9%87%8F</span></pre></td></tr><tr><td data-num="11"></td><td><pre></pre></td></tr><tr><td data-num="12"></td><td><pre><span class="token comment"># 修改 bin 目录下的 tmhmm 和 tmhmmformat.pl 的首行为 “#!/usr/bin/perl”</span></pre></td></tr></table></figure></li><li><p><font color="#FF0000">运行错误</font></p><p>运行软件时总报 <code>Segmentation fault (core dumped)</code> 错误，暂时无解。各位可以使用其<span class="exturl" data-url="aHR0cDovL3d3dy5jYnMuZHR1LmRrL3NlcnZpY2VzL1RNSE1NLw==">在线版</span>。</p></li></ul><h1 id="ruby软件用法-rtusagertruby"><a class="anchor" href="#ruby软件用法-rtusagertruby">#</a><ruby>软件用法 <rt>Usage</rt></ruby></h1><h2 id="signalp-60"><a class="anchor" href="#signalp-60">#</a> SignalP 6.0</h2><h3 id="ruby预测-rtpredictionrtruby"><a class="anchor" href="#ruby预测-rtpredictionrtruby">#</a><ruby>预测 <rt>Prediction</rt></ruby></h3><p>A command takes the following form</p><figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre>signalp6 --fastafile /path/to/input.fasta --organism other --output_dir path/to/be/saved --format txt --mode fast</pre></td></tr></table></figure><ul><li><p><code>fastafile</code><ruby>输入文件为 FASTA 格式的蛋白序列文件<rt>Specifies the fasta file with the sequences to be predicted.</rt></ruby>。</p></li><li><p><code>organism</code> is either <code>other</code> or <code>Eukarya</code> . Specifying <code>Eukarya</code> triggers post-processing of the SP predictions to prevent spurious results (only predicts type Sec/SPI).</p></li><li><p><code>format</code> can take the values <code>txt</code> , <code>png</code> , <code>eps</code> , <code>all</code> . It defines what output files are created for individual sequences. <code>txt</code> produces a tabular <code>.gff</code> file with the per-position predictions for each sequence. <code>png</code> , <code>eps</code> , <code>all</code> additionally produce probability plots in the requested format. For larger prediction jobs, plotting will slow down the processing speed significantly.</p></li><li><p><code>mode</code> is either <code>fast</code> , <code>slow</code> or <code>slow-sequential</code> . Default is <code>fast</code> , which uses a smaller model that approximates the performance of the full model, requiring a fraction of the resources and being significantly faster. <code>slow</code> runs the full model in parallel, which requires more than 14GB of RAM to be available. <code>slow-sequential</code> runs the full model sequentially, taking the same amount of RAM as <code>fast</code> but being 6 times slower. If the specified model is not installed, SignalP will abort with an error.</p></li></ul><h3 id="ruby输出rt-outputsrtruby"><a class="anchor" href="#ruby输出rt-outputsrtruby">#</a><ruby>输出<rt>Outputs</rt></ruby></h3><ul><li><p>output_dir/output.gff3：仅包含含有信号肽的序列信息；</p><p><img data-src="https://fastly.jsdelivr.net/gh/liaochenlanruo/cdn@master/images/post/c886_1.jpg" alt="output.gff3"></p></li><li><p>output_dir/prediction_results.txt：包含了输入文件中的所有序列（不重要）；</p></li><li><p>output_dir/region_output.gff3：包含所有的信号肽区域信息。</p><ul><li><p>n-region: The n-terminal region of the signal peptide. Reported for Sec/SPI, Sec/SPII, Tat/SPI and Tat/SPII. Labeled as N</p></li><li><p>h-region: The center hydrophobic region of the signal peptide. Reported for Sec/SPI, Sec/SPII, Tat/SPI and Tat/SPII. Labeled as H</p></li><li><p>c-region: The c-terminal region of the signal peptide, reported for Sec/SPI and Tat/SPI.</p></li><li><p>Cysteine: The conserved cysteine in +1 of the cleavage site of Lipoproteins that is used for Lipidation. Labeled as c.</p></li><li><p>Twin-arginine motif: The twin-arginine motif at the end of the n-region that is characteristic for Tat signal peptides. Labeled as R.</p></li><li><p>Sec/SPIII: These signal peptides have no known region structure.</p><p><img data-src="https://fastly.jsdelivr.net/gh/liaochenlanruo/cdn@master/images/post/c886_2.jpg" alt="region_output.gff3"></p></li></ul></li></ul><h3 id="批处理与结果优化"><a class="anchor" href="#批处理与结果优化">#</a> 批处理与结果优化</h3><p>脚本名：run_SignalP.pl</p><figure class="highlight perl"><figcaption data-lang="perl"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token comment">#!/usr/bin/perl</span></pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token keyword">use</span> strict<span class="token punctuation">;</span></pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token keyword">use</span> warnings<span class="token punctuation">;</span></pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token comment"># Author: Liu Hualin</span></pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token comment"># Date: Oct 14, 2021</span></pre></td></tr><tr><td data-num="6"></td><td><pre></pre></td></tr><tr><td data-num="7"></td><td><pre></pre></td></tr><tr><td data-num="8"></td><td><pre>open IDNOSEQ<span class="token punctuation">,</span> <span class="token string">">IDNOSEQ.txt"</span> <span class="token operator">||</span> <span class="token keyword">die</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="9"></td><td><pre><span class="token keyword">my</span> <span class="token variable">@faa</span> <span class="token operator">=</span> glob<span class="token punctuation">(</span><span class="token string">"*.faa"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="10"></td><td><pre><span class="token keyword">foreach</span>  <span class="token punctuation">(</span><span class="token variable">@faa</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="11"></td><td><pre>	<span class="token variable">$_</span> <span class="token operator">=~</span> <span class="token regex">/(.+).faa/</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="12"></td><td><pre>	<span class="token keyword">my</span> <span class="token variable">$str</span> <span class="token operator">=</span> <span class="token variable">$1</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="13"></td><td><pre>	<span class="token keyword">my</span> <span class="token variable">$out</span> <span class="token operator">=</span> <span class="token variable">$1</span> <span class="token operator">.</span> <span class="token string">".nodesc"</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="14"></td><td><pre>	<span class="token keyword">my</span> <span class="token variable">$sigseq</span> <span class="token operator">=</span> <span class="token variable">$1</span> <span class="token operator">.</span> <span class="token string">".sigseq"</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="15"></td><td><pre>	<span class="token keyword">my</span> <span class="token variable">$outdir</span> <span class="token operator">=</span> <span class="token variable">$1</span> <span class="token operator">.</span> <span class="token string">"_signalp"</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="16"></td><td><pre>	open IN<span class="token punctuation">,</span> <span class="token variable">$_</span> <span class="token operator">||</span> <span class="token keyword">die</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="17"></td><td><pre>	open OUT<span class="token punctuation">,</span> <span class="token string">">$out"</span> <span class="token operator">||</span> <span class="token keyword">die</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="18"></td><td><pre>	<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token filehandle symbol">&lt;IN></span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="19"></td><td><pre>		chomp<span class="token punctuation">;</span></pre></td></tr><tr><td data-num="20"></td><td><pre>		<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token regex">/^(>\S+)/</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="21"></td><td><pre>			<span class="token keyword">print</span> OUT <span class="token variable">$1</span> <span class="token operator">.</span> <span class="token string">"\n"</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="22"></td><td><pre>		<span class="token punctuation">&#125;</span><span class="token keyword">else</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="23"></td><td><pre>			<span class="token keyword">print</span> OUT <span class="token variable">$_</span> <span class="token operator">.</span> <span class="token string">"\n"</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="24"></td><td><pre>		<span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="25"></td><td><pre>	<span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="26"></td><td><pre>	close IN<span class="token punctuation">;</span></pre></td></tr><tr><td data-num="27"></td><td><pre>	close OUT<span class="token punctuation">;</span></pre></td></tr><tr><td data-num="28"></td><td><pre>	<span class="token keyword">my</span> <span class="token variable">%hash</span> <span class="token operator">=</span> idseq<span class="token punctuation">(</span><span class="token variable">$out</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="29"></td><td><pre>	system<span class="token punctuation">(</span><span class="token string">"signalp6 --fastafile $out --organism other --output_dir $outdir --format txt --mode fast"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="30"></td><td><pre>	<span class="token keyword">my</span> <span class="token variable">$gff</span> <span class="token operator">=</span> <span class="token variable">$outdir</span> <span class="token operator">.</span> <span class="token string">"/output.gff3"</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="31"></td><td><pre>	<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span> <span class="token operator">-z</span> <span class="token variable">$gff</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="32"></td><td><pre>		open IN<span class="token punctuation">,</span> <span class="token string">"$gff"</span> <span class="token operator">||</span> <span class="token keyword">die</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="33"></td><td><pre>		<span class="token filehandle symbol">&lt;IN></span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="34"></td><td><pre>		open OUT<span class="token punctuation">,</span> <span class="token string">">$sigseq"</span> <span class="token operator">||</span> <span class="token keyword">die</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="35"></td><td><pre>		<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token filehandle symbol">&lt;IN></span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="36"></td><td><pre>			chomp<span class="token punctuation">;</span></pre></td></tr><tr><td data-num="37"></td><td><pre>			<span class="token keyword">my</span> <span class="token variable">@lines</span> <span class="token operator">=</span> split <span class="token regex">/\t/</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="38"></td><td><pre>			<span class="token keyword">if</span> <span class="token punctuation">(</span>exists <span class="token variable">$hash</span><span class="token punctuation">&#123;</span><span class="token variable">$lines</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">&#125;</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="39"></td><td><pre>				<span class="token keyword">print</span> OUT <span class="token string">">$lines[0]\n$hash&#123;$lines[0]&#125;\n"</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="40"></td><td><pre>			<span class="token punctuation">&#125;</span><span class="token keyword">else</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="41"></td><td><pre>				<span class="token keyword">print</span> IDNOSEQ <span class="token variable">$str</span> <span class="token operator">.</span> <span class="token string">"\t"</span> <span class="token operator">.</span> <span class="token string">"$lines[0]\n"</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="42"></td><td><pre>			<span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="43"></td><td><pre>		<span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="44"></td><td><pre>		close IN<span class="token punctuation">;</span></pre></td></tr><tr><td data-num="45"></td><td><pre>		close OUT<span class="token punctuation">;</span></pre></td></tr><tr><td data-num="46"></td><td><pre>	<span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="47"></td><td><pre>	system<span class="token punctuation">(</span><span class="token string">"rm $out"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="48"></td><td><pre>	system<span class="token punctuation">(</span><span class="token string">"mv $sigseq $outdir"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="49"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="50"></td><td><pre>close IDNOSEQ<span class="token punctuation">;</span></pre></td></tr><tr><td data-num="51"></td><td><pre></pre></td></tr><tr><td data-num="52"></td><td><pre></pre></td></tr><tr><td data-num="53"></td><td><pre><span class="token function"><span class="token keyword">sub</span> idseq</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="54"></td><td><pre>	<span class="token keyword">my</span> <span class="token punctuation">(</span><span class="token variable">$fasta</span><span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token variable">@_</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="55"></td><td><pre>	<span class="token keyword">my</span> <span class="token variable">%hash</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="56"></td><td><pre>	<span class="token keyword">local</span> <span class="token variable">$/</span> <span class="token operator">=</span> <span class="token string">">"</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="57"></td><td><pre>	open IN<span class="token punctuation">,</span> <span class="token variable">$fasta</span> <span class="token operator">||</span> <span class="token keyword">die</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="58"></td><td><pre>	<span class="token filehandle symbol">&lt;IN></span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="59"></td><td><pre>	<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token filehandle symbol">&lt;IN></span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="60"></td><td><pre>		chomp<span class="token punctuation">;</span></pre></td></tr><tr><td data-num="61"></td><td><pre>		<span class="token keyword">my</span> <span class="token punctuation">(</span><span class="token variable">$header</span><span class="token punctuation">,</span> <span class="token variable">$seq</span><span class="token punctuation">)</span> <span class="token operator">=</span> split <span class="token punctuation">(</span><span class="token regex">/\n/</span><span class="token punctuation">,</span> <span class="token variable">$_</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="62"></td><td><pre>		<span class="token variable">$header</span> <span class="token operator">=~</span> <span class="token regex">/(\S+)/</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="63"></td><td><pre>		<span class="token keyword">my</span> <span class="token variable">$id</span> <span class="token operator">=</span> <span class="token variable">$1</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="64"></td><td><pre>		<span class="token variable">$hash</span><span class="token punctuation">&#123;</span><span class="token variable">$id</span><span class="token punctuation">&#125;</span> <span class="token operator">=</span> <span class="token variable">$seq</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="65"></td><td><pre>	<span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="66"></td><td><pre>	close IN<span class="token punctuation">;</span></pre></td></tr><tr><td data-num="67"></td><td><pre>	<span class="token keyword">return</span> <span class="token punctuation">(</span><span class="token variable">%hash</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="68"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure><p>将 run_SignalP.pl 与后缀名为 “.faa” 的 FASTA 格式文件放在同一目录下，在终端中运行如下代码：</p><figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre>perl run_SignalP.pl</pre></td></tr></table></figure><h3 id="ruby结果解读rtoutput-interpretationrtruby"><a class="anchor" href="#ruby结果解读rtoutput-interpretationrtruby">#</a><ruby>结果解读<rt>Output interpretation</rt></ruby></h3><p>* 代表输入文件的名字。</p><ul><li><p>*_signalp/output.gff3：仅包含含有信号肽的序列信息；</p></li><li><p>*_signalp/prediction_results.txt：包含了输入文件中的所有序列（不重要）；</p></li><li><p>*_signalp/region_output.gff3：包含所有的信号肽区域信息；</p></li><li><p><strong>*_signalp/*.sigseq</strong>：存储所有信号肽的氨基酸序列文件，可用作 TMHMM 的输入文件。</p></li></ul><h2 id="tmhmm"><a class="anchor" href="#tmhmm">#</a> TMHMM</h2><h3 id="预测"><a class="anchor" href="#预测">#</a> 预测</h3><p>离线版总是报错，找不出原因，因此使用网页服务器进行，输入文件为上述生成的 “*_signalp/*.sigseq”，将其上传至网页版<span class="exturl" data-url="aHR0cDovL3d3dy5jYnMuZHR1LmRrL3NlcnZpY2VzL1RNSE1NLw=="> TMHMM</span>，提交任务，等待结果即可。</p><h3 id="结果展示"><a class="anchor" href="#结果展示">#</a> 结果展示</h3><p>TMHMM 可以输出多种格式的结果文件，具体请参考其<span class="exturl" data-url="aHR0cDovL3d3dy5jYnMuZHR1LmRrL3NlcnZpY2VzL1RNSE1NLTIuMC9UTUhNTTIuMC5ndWlkZS5odG1sI291dHB1dA==">官方说明</span>。</p><p><img data-src="https://fastly.jsdelivr.net/gh/liaochenlanruo/cdn@master/images/post/c886_2.5.jpg" alt="在TMHMM网站提交任务"></p><ul><li><p><strong>Long output format</strong></p><ul><li><p>Length：<ruby>蛋白序列的长度。<rt>The length of the protein sequence.</rt></ruby></p></li><li><p>Number of predicted TMHs：<ruby>预测到的跨膜螺旋的数量。<rt>The number of predicted transmembrane helices.</rt></ruby></p></li><li><p>Exp number of AAs in TMHs：<ruby>跨膜螺旋中氨基酸的预期数量。<rt>The expected number of amino acids intransmembrane helices.</rt></ruby><ruby>如果此数字大于 18，则很可能是跨膜蛋白（或具有信号肽）。<rt>If this number is larger than 18 it is very likely to be a transmembrane protein (OR have a signal peptide).</rt></ruby></p></li><li><p>Exp number, first 60 AAs：<ruby>在蛋白的前 60 个氨基酸中跨膜螺旋中氨基酸的预期数量。<rt>The expected number of amino acids in transmembrane helices in the first 60 amino acids of the protein.</rt></ruby><ruby>如果该数字超过几个，你应该被警告在 N 端预测的跨膜螺旋可能是一个信号肽。<rt>If it more than a few, you are warned that a predicted transmembrane helix in the N-term could be a signal peptide.</rt></ruby></p></li><li><p>Total prob of N-in：<ruby>N 端在膜的细胞质一侧的总概率。<rt>The total probability that the N-term is on the cytoplasmic side of the membrane.</rt></ruby></p></li><li><p>POSSIBLE N-term signal sequence：<ruby>当 “Exp number, first 60 AAs” 大于 10 时产生的警告。 <rt>A warning that is produced when &quot;Exp number, first 60 AAs&quot; is larger than 10.</rt></ruby></p></li></ul></li><li><p>蛋白 F01_bin.1_00110 共计 436 个氨基酸，有 5 个跨膜螺旋结构。</p><p><img data-src="https://fastly.jsdelivr.net/gh/liaochenlanruo/cdn@master/images/post/c886_3.jpg" alt="含有跨膜结构的蛋白"></p></li><li><p>蛋白 F01_bin.1_00142 共计 557 个氨基酸，所有序列均在膜外，即该序列编码的是分泌蛋白。</p><p><img data-src="https://fastly.jsdelivr.net/gh/liaochenlanruo/cdn@master/images/post/c886_4.jpg" alt="不含跨膜结构的蛋白"></p></li><li><p><strong>Short output format</strong></p><ul><li><p>&quot;len=&quot;：<ruby>蛋白序列的长度。 <rt>The length of the protein sequence.</rt></ruby></p></li><li><p>&quot;ExpAA=&quot;：<ruby>跨膜螺旋中氨基酸的预期数量。<rt>The expected number of amino acids intransmembrane helices.</rt></ruby><ruby>如果此数字大于 18，则很可能是跨膜蛋白（或具有信号肽）。<rt>If this number is larger than 18 it is very likely to be a transmembrane protein (OR have a signal peptide).</rt></ruby></p></li><li><p>&quot;First60=&quot;：<ruby>在蛋白的前 60 个氨基酸中跨膜螺旋中氨基酸的预期数量。<rt>The expected number of amino acids in transmembrane helices in the first 60 amino acids of the protein.</rt></ruby><ruby>如果该数字超过几个，你应该被警告在 N 端预测的跨膜螺旋可能是一个信号肽。<rt>If it more than a few, you are warned that a predicted transmembrane helix in the N-term could be a signal peptide.</rt></ruby></p></li><li><p>&quot;PredHel=&quot;：<ruby>预测到的跨膜螺旋的数量。 <rt>The number of predicted transmembrane helices by N-best.</rt></ruby></p></li><li><p>&quot;Topology=&quot;：<ruby>N-best 预测的拓扑结构。<rt>The topology predicted by N-best.</rt></ruby>拓扑是由跨膜螺旋的位置给出的，如果螺旋在内部，则由 “i” 分隔，如果螺旋在外部，则由 “o” 分隔。'i7-29o44-66i87-109o' 意味着它从膜内开始，在位置 7 到 29 有一个预测的 TMH，30-43 在膜外，然后是位置 44-66 的 TMH。</p></li></ul><p><img data-src="https://fastly.jsdelivr.net/gh/liaochenlanruo/cdn@master/images/post/c886_5.jpg" alt="Short output format"></p></li></ul><h3 id="结果汇总"><a class="anchor" href="#结果汇总">#</a> 结果汇总</h3><p>通过网页版预测我们仅得到了一个列表文件（Short output format），该文件需要自己复制网页内容粘贴到新文件中，我将其命名为<b>*_TMHMM_SHORT.txt</b>，并将其存放在<b>*_signalp</b>目录中，该目录是由<strong> run_SignalP.pl</strong> 生成的。下面我将会统计各个基因组中信号肽蛋白的总数量、分泌蛋白数量和跨膜蛋白数量到文件<strong> Statistics.txt</strong> 中，并分别提取每个基因组的分泌蛋白序列到<b>*_signalp/*.secretory.faa</b>文件中，提取跨膜蛋白序列到<b>*_signalp/*.membrane.faa</b>文件中。该过程将通过<strong> tmhmm_parser.pl</strong> 完成。</p><figure class="highlight perl"><figcaption data-lang="perl"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token comment">#!/usr/bin/perl</span></pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token keyword">use</span> strict<span class="token punctuation">;</span></pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token keyword">use</span> warnings<span class="token punctuation">;</span></pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token comment"># Author: Liu Hualin</span></pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token comment"># Date: Oct 15, 2021</span></pre></td></tr><tr><td data-num="6"></td><td><pre></pre></td></tr><tr><td data-num="7"></td><td><pre>open OUT<span class="token punctuation">,</span> <span class="token string">">Statistics.txt"</span> <span class="token operator">||</span> <span class="token keyword">die</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="8"></td><td><pre><span class="token keyword">print</span> OUT <span class="token string">"Strain name\tSignal peptide numbers\tSecretory protein numbers\tMembrane protein numbers\n"</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="9"></td><td><pre><span class="token keyword">my</span> <span class="token variable">@sig</span> <span class="token operator">=</span> glob<span class="token punctuation">(</span><span class="token string">"*_signalp"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="10"></td><td><pre><span class="token keyword">foreach</span> <span class="token keyword">my</span> <span class="token variable">$sig</span> <span class="token punctuation">(</span><span class="token variable">@sig</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="11"></td><td><pre>	<span class="token variable">$sig</span><span class="token operator">=~</span><span class="token regex">/(.+)_signalp/</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="12"></td><td><pre>	<span class="token keyword">my</span> <span class="token variable">$str</span> <span class="token operator">=</span> <span class="token variable">$1</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="13"></td><td><pre>	<span class="token keyword">my</span> <span class="token variable">$tmhmm</span> <span class="token operator">=</span> <span class="token variable">$sig</span> <span class="token operator">.</span> <span class="token string">"/$str"</span> <span class="token operator">.</span> <span class="token string">"_TMHMM_SHORT.txt"</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="14"></td><td><pre>	<span class="token keyword">my</span> <span class="token variable">$fasta</span> <span class="token operator">=</span> <span class="token variable">$sig</span> <span class="token operator">.</span> <span class="token string">"/$str"</span> <span class="token operator">.</span> <span class="token string">".sigseq"</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="15"></td><td><pre>	<span class="token keyword">my</span> <span class="token variable">$secretory</span> <span class="token operator">=</span> <span class="token variable">$str</span> <span class="token operator">.</span> <span class="token string">".secretory.faa"</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="16"></td><td><pre>	<span class="token keyword">my</span> <span class="token variable">$membrane</span> <span class="token operator">=</span> <span class="token variable">$str</span> <span class="token operator">.</span> <span class="token string">".membrane.faa"</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="17"></td><td><pre>	open SEC<span class="token punctuation">,</span> <span class="token string">">$secretory"</span> <span class="token operator">||</span> <span class="token keyword">die</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="18"></td><td><pre>	open MEM<span class="token punctuation">,</span> <span class="token string">">$membrane"</span> <span class="token operator">||</span> <span class="token keyword">die</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="19"></td><td><pre>	<span class="token keyword">my</span> <span class="token variable">$out</span> <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="20"></td><td><pre>	<span class="token keyword">my</span> <span class="token variable">$on</span> <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="21"></td><td><pre>	<span class="token keyword">my</span> <span class="token variable">%hash</span> <span class="token operator">=</span> idseq<span class="token punctuation">(</span><span class="token variable">$fasta</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="22"></td><td><pre>	open IN<span class="token punctuation">,</span> <span class="token variable">$tmhmm</span> <span class="token operator">||</span> <span class="token keyword">die</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="23"></td><td><pre>	<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token filehandle symbol">&lt;IN></span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="24"></td><td><pre>		chomp<span class="token punctuation">;</span></pre></td></tr><tr><td data-num="25"></td><td><pre>		<span class="token variable">$_</span><span class="token operator">=~</span><span class="token regex">s/[\r\n]+//g</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="26"></td><td><pre><span class="token comment">#		print $_ . "\n";</span></pre></td></tr><tr><td data-num="27"></td><td><pre>		<span class="token keyword">my</span> <span class="token variable">@lines</span> <span class="token operator">=</span> split <span class="token regex">/\t/</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="28"></td><td><pre>		<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$lines</span><span class="token punctuation">[</span><span class="token number">5</span><span class="token punctuation">]</span> <span class="token operator">eq</span> <span class="token string">"Topology=o"</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="29"></td><td><pre>			<span class="token variable">$out</span><span class="token operator">++</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="30"></td><td><pre>			<span class="token keyword">print</span> SEC <span class="token string">">$lines[0]\n$hash&#123;$lines[0]&#125;\n"</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="31"></td><td><pre>		<span class="token punctuation">&#125;</span><span class="token keyword">else</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="32"></td><td><pre>			<span class="token variable">$on</span><span class="token operator">++</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="33"></td><td><pre>			<span class="token keyword">print</span> MEM <span class="token string">">$lines[0]\n$hash&#123;$lines[0]&#125;\n"</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="34"></td><td><pre>		<span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="35"></td><td><pre>	<span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="36"></td><td><pre>	close IN<span class="token punctuation">;</span></pre></td></tr><tr><td data-num="37"></td><td><pre>	close SEC<span class="token punctuation">;</span></pre></td></tr><tr><td data-num="38"></td><td><pre>	close MEM<span class="token punctuation">;</span></pre></td></tr><tr><td data-num="39"></td><td><pre>	system<span class="token punctuation">(</span><span class="token string">"mv $secretory $membrane $sig"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="40"></td><td><pre>	<span class="token keyword">my</span> <span class="token variable">$total</span> <span class="token operator">=</span> <span class="token variable">$out</span> <span class="token operator">+</span> <span class="token variable">$on</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="41"></td><td><pre>	<span class="token keyword">print</span> OUT <span class="token string">"$str\t$total\t$out\t$on\n"</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="42"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="43"></td><td><pre></pre></td></tr><tr><td data-num="44"></td><td><pre>close OUT<span class="token punctuation">;</span></pre></td></tr><tr><td data-num="45"></td><td><pre></pre></td></tr><tr><td data-num="46"></td><td><pre><span class="token function"><span class="token keyword">sub</span> idseq</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="47"></td><td><pre>	<span class="token keyword">my</span> <span class="token punctuation">(</span><span class="token variable">$fasta</span><span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token variable">@_</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="48"></td><td><pre>	<span class="token keyword">my</span> <span class="token variable">%hash</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="49"></td><td><pre>	<span class="token keyword">local</span> <span class="token variable">$/</span> <span class="token operator">=</span> <span class="token string">">"</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="50"></td><td><pre>	open IN<span class="token punctuation">,</span> <span class="token variable">$fasta</span> <span class="token operator">||</span> <span class="token keyword">die</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="51"></td><td><pre>	<span class="token filehandle symbol">&lt;IN></span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="52"></td><td><pre>	<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token filehandle symbol">&lt;IN></span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="53"></td><td><pre>		chomp<span class="token punctuation">;</span></pre></td></tr><tr><td data-num="54"></td><td><pre>		<span class="token keyword">my</span> <span class="token punctuation">(</span><span class="token variable">$header</span><span class="token punctuation">,</span> <span class="token variable">$seq</span><span class="token punctuation">)</span> <span class="token operator">=</span> split <span class="token punctuation">(</span><span class="token regex">/\n/</span><span class="token punctuation">,</span> <span class="token variable">$_</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="55"></td><td><pre>		<span class="token variable">$header</span> <span class="token operator">=~</span> <span class="token regex">/(\S+)/</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="56"></td><td><pre>		<span class="token keyword">my</span> <span class="token variable">$id</span> <span class="token operator">=</span> <span class="token variable">$1</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="57"></td><td><pre>		<span class="token variable">$hash</span><span class="token punctuation">&#123;</span><span class="token variable">$id</span><span class="token punctuation">&#125;</span> <span class="token operator">=</span> <span class="token variable">$seq</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="58"></td><td><pre>	<span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="59"></td><td><pre>	close IN<span class="token punctuation">;</span></pre></td></tr><tr><td data-num="60"></td><td><pre>	<span class="token keyword">return</span> <span class="token punctuation">(</span><span class="token variable">%hash</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="61"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr></table></figure><p><strong>运行方法</strong>：将<b>tmhmm_parser.pl</b>放在<b>*_signalp</b>的上一级目录下，<b>*_signalp</b>目录中必须包含<b>*_TMHMM_SHORT.txt</b>文件和<b>*.sigseq</b>文件。在终端运行如下代码：</p><figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre>perl tmhmm_parser.pl</pre></td></tr></table></figure><h1 id="脚本获取"><a class="anchor" href="#脚本获取">#</a> 脚本获取</h1><p>关注公众号 “生信之巅”，聊天窗口回复 “c886” 获取下载链接。</p><table align="center"><tr><td align="center"><img data-src="https://fastly.jsdelivr.net/gh/liaochenlanruo/cdn@master/img/social/生信之巅公众号.jpg" alt="生信之巅微信公众号" style="width:100px;height:100px;vertical-align:-20px;border-radius:0;margin-right:0;margin-bottom:5px;align:center"></td><td align="center"><img data-src="https://fastly.jsdelivr.net/gh/liaochenlanruo/cdn@master/img/social/小程序码.png" alt="生信之巅小程序码" style="width:100px;height:100px;vertical-align:-20px;border-radius:0;margin-left:0;margin-bottom:5px;align:center"></td></tr></table><p><font color="#FF0000"><ruby><b>敬告</b>：使用文中脚本请引用本文网址，请尊重本人的劳动成果，谢谢！<rt><b>Notice</b>: When you use the scripts in this article, please cite the link of this webpage. Thank you!</rt></ruby></font></p><h1 id="参考"><a class="anchor" href="#参考">#</a> 参考</h1><ul><li><p><span class="exturl" data-url="aHR0cHM6Ly9zZXJ2aWNlcy5oZWFsdGh0ZWNoLmR0dS5kay9zZXJ2aWNlLnBocD9TaWduYWxQLTYuMA==">SignalP V6.0</span></p></li><li><p><span class="exturl" data-url="aHR0cDovL3d3dy5jYnMuZHR1LmRrL3NlcnZpY2VzL1RNSE1NLw==">TMHMM</span></p></li></ul><div class="tags"><a href="/tags/Functional-genomics/" rel="tag"><i class="ic i-tag"></i> Functional genomics</a> <a href="/tags/SY179/" rel="tag"><i class="ic i-tag"></i> SY179</a> <a href="/tags/WGS/" rel="tag"><i class="ic i-tag"></i> WGS</a> <a href="/tags/%E7%94%9F%E4%BF%A1%E8%BD%AF%E4%BB%B6/" rel="tag"><i class="ic i-tag"></i> 生信软件</a></div></div><footer><div class="meta"><span class="item"><span class="icon"><i class="ic i-calendar-check"></i> </span><span class="text">Edited on</span> <time title="Modified: 2022-05-31 09:41:33" itemprop="dateModified" datetime="2022-05-31T09:41:33+08:00">2022-05-31</time> </span><span id="post/c886.html" class="item leancloud_visitors" data-flag-title="SignalP+TMHMM预测微生物分泌蛋白" title="Views"><span class="icon"><i class="ic i-eye"></i> </span><span class="text">Views</span> <span class="leancloud-visitors-count"></span> <span class="text">times</span></span></div><div class="reward"><button><i class="ic i-heartbeat"></i> Donate</button><p>Give me a cup of [coffee]~(￣▽￣)~*</p><div id="qr"><div><img data-src="/images/reward-wepays.jpg" alt="Hualin Liu WeChat Pay"><p>WeChat Pay</p></div><div><img data-src="/images/AliPays.jpg" alt="Hualin Liu Alipay"><p>Alipay</p></div></div></div><div id="copyright"><ul><li class="author"><strong>Post author: </strong>liaochenlanruo <i class="ic i-at"><em>@</em></i>了尘兰若的小坑</li><li class="link"><strong>Post link: </strong><a href="https://liaochenlanruo.gitee.io/post/c886.html" title="SignalP+TMHMM预测微生物分泌蛋白">https://liaochenlanruo.gitee.io/post/c886.html</a></li><li class="license"><strong>Copyright Notice: </strong>All articles in this blog are licensed under <span class="exturl" data-url="aHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLXNhLzQuMC9kZWVkLnpo"><i class="ic i-creative-commons"><em>(CC)</em></i>BY-NC-SA</span> unless stating additionally.</li></ul></div></footer></article></div><div class="post-nav"><div class="item left"><a href="/post/fb68.html" itemprop="url" rel="prev" data-background-image="https:&#x2F;&#x2F;fastly.jsdelivr.net&#x2F;gh&#x2F;liaochenlanruo&#x2F;cdn@master&#x2F;img&#x2F;custom&#x2F;bgs&#x2F;thumb_87.webp" title="使用EffectiveT3预测微生物中的III型分泌系统效应蛋白"><span class="type">Previous Post</span> <span class="category"><i class="ic i-flag"></i> 生物信息</span><h3>使用EffectiveT3预测微生物中的III型分泌系统效应蛋白</h3></a></div><div class="item right"><a href="/post/e5ab.html" itemprop="url" rel="next" data-background-image="https:&#x2F;&#x2F;fastly.jsdelivr.net&#x2F;gh&#x2F;liaochenlanruo&#x2F;cdn@master&#x2F;img&#x2F;custom&#x2F;bgs&#x2F;thumb_88.webp" title="hexo-theme-sakuraplus表格边框及滚动条调教"><span class="type">Next Post</span> <span class="category"><i class="ic i-flag"></i> 网站建设</span><h3>hexo-theme-sakuraplus表格边框及滚动条调教</h3></a></div></div><div class="wrap" id="comments"></div></div><div id="sidebar"><div class="inner"><div class="panels"><div class="inner"><div class="contents panel pjax" data-title="Contents"><ol class="toc"><li class="toc-item toc-level-1"><a class="toc-link" href="#ruby%E8%BD%AF%E4%BB%B6-rtsoftwarertruby"><span class="toc-number">1.</span> <span class="toc-text">软件 Software</span></a></li><li class="toc-item toc-level-1"><a class="toc-link" href="#ruby%E8%BD%AF%E4%BB%B6%E5%AE%89%E8%A3%85-rtinstallation-of-softwaresrtruby"><span class="toc-number">2.</span> <span class="toc-text">软件安装 Installation of Softwares</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%AE%89%E8%A3%85signalp-60"><span class="toc-number">2.1.</span> <span class="toc-text">安装 SignalP 6.0</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%AE%89%E8%A3%85tmhmm-v20c"><span class="toc-number">2.2.</span> <span class="toc-text">安装 TMHMM V2.0c</span></a></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link" href="#ruby%E8%BD%AF%E4%BB%B6%E7%94%A8%E6%B3%95-rtusagertruby"><span class="toc-number">3.</span> <span class="toc-text">软件用法 Usage</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#signalp-60"><span class="toc-number">3.1.</span> <span class="toc-text">SignalP 6.0</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#ruby%E9%A2%84%E6%B5%8B-rtpredictionrtruby"><span class="toc-number">3.1.1.</span> <span class="toc-text">预测 Prediction</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#ruby%E8%BE%93%E5%87%BArt-outputsrtruby"><span class="toc-number">3.1.2.</span> <span class="toc-text">输出 Outputs</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E6%89%B9%E5%A4%84%E7%90%86%E4%B8%8E%E7%BB%93%E6%9E%9C%E4%BC%98%E5%8C%96"><span class="toc-number">3.1.3.</span> <span class="toc-text">批处理与结果优化</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#ruby%E7%BB%93%E6%9E%9C%E8%A7%A3%E8%AF%BBrtoutput-interpretationrtruby"><span class="toc-number">3.1.4.</span> <span class="toc-text">结果解读Output interpretation</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#tmhmm"><span class="toc-number">3.2.</span> <span class="toc-text">TMHMM</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E9%A2%84%E6%B5%8B"><span class="toc-number">3.2.1.</span> <span class="toc-text">预测</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E7%BB%93%E6%9E%9C%E5%B1%95%E7%A4%BA"><span class="toc-number">3.2.2.</span> <span class="toc-text">结果展示</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E7%BB%93%E6%9E%9C%E6%B1%87%E6%80%BB"><span class="toc-number">3.2.3.</span> <span class="toc-text">结果汇总</span></a></li></ol></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link" href="#%E8%84%9A%E6%9C%AC%E8%8E%B7%E5%8F%96"><span class="toc-number">4.</span> <span class="toc-text">脚本获取</span></a></li><li class="toc-item toc-level-1"><a class="toc-link" href="#%E5%8F%82%E8%80%83"><span class="toc-number">5.</span> <span class="toc-text">参考</span></a></li></ol></div><div class="related panel pjax" data-title="Related"><ul><li><a href="/post/19824.html" rel="bookmark" title="生物信息学1：VMware虚拟机及Bio-linux安装与配置">生物信息学1：VMware虚拟机及Bio-linux安装与配置</a></li><li><a href="/post/9.html" rel="bookmark" title="生物信息学2：VirtualBox虚拟机及Bio-Linux安装">生物信息学2：VirtualBox虚拟机及Bio-Linux安装</a></li><li><a href="/post/10877.html" rel="bookmark" title="生物信息学3：微生物基因组学常用软件安装">生物信息学3：微生物基因组学常用软件安装</a></li><li><a href="/post/30650.html" rel="bookmark" title="根据基因组预测表型 —— traitar的安装与使用">根据基因组预测表型 —— traitar的安装与使用</a></li><li><a href="/post/44606.html" rel="bookmark" title="kSNP3寻找SNPs并构建进化树">kSNP3寻找SNPs并构建进化树</a></li><li><a href="/post/43504.html" rel="bookmark" title="用wget批量下载含有链接的文件/目录">用wget批量下载含有链接的文件/目录</a></li><li><a href="/post/94f2.html" rel="bookmark" title="为PubMed添加功能">为PubMed添加功能</a></li><li><a href="/post/4e1.html" rel="bookmark" title="OrthoFinder2—同源蛋白家族聚类">OrthoFinder2—同源蛋白家族聚类</a></li><li><a href="/post/848f.html" rel="bookmark" title="PGCGAP中文说明">PGCGAP中文说明</a></li><li><a href="/post/d163.html" rel="bookmark" title="Bioconda贡献指南">Bioconda贡献指南</a></li><li><a href="/post/f6c9.html" rel="bookmark" title="Linux和基因组测序技术初识">Linux和基因组测序技术初识</a></li><li><a href="/post/5908.html" rel="bookmark" title="BtToxin_Digger--A high-throughput Bacillus thuringiensis toxin mining pipeline">BtToxin_Digger--A high-throughput Bacillus thuringiensis toxin mining pipeline</a></li><li><a href="/post/ab1b.html" rel="bookmark" title="宏基因组分析流程及代码">宏基因组分析流程及代码</a></li><li><a href="/post/4cf4.html" rel="bookmark" title="Use microeco分析扩增子数据">Use microeco分析扩增子数据</a></li><li><a href="/post/1755.html" rel="bookmark" title="扩增子分析--计算随机过程和决定性过程比例">扩增子分析--计算随机过程和决定性过程比例</a></li><li><a href="/post/e7e9.html" rel="bookmark" title="根据assession number批量从NCB下载数据">根据assession number批量从NCB下载数据</a></li><li><a href="/post/e922.html" rel="bookmark" title="Swissprot数据库的本地化与序列比对并与其他数据库快速mapping">Swissprot数据库的本地化与序列比对并与其他数据库快速mapping</a></li><li><a href="/post/412a.html" rel="bookmark" title="构建样本vs基因矩阵">构建样本vs基因矩阵</a></li><li><a href="/post/9052.html" rel="bookmark" title="CAZy碳水化合物活性酶预测">CAZy碳水化合物活性酶预测</a></li><li><a href="/post/5324.html" rel="bookmark" title="原核生物基因岛预测">原核生物基因岛预测</a></li><li><a href="/post/d9f9.html" rel="bookmark" title="按照Contig切割GenBank文件">按照Contig切割GenBank文件</a></li><li><a href="/post/3a23.html" rel="bookmark" title="从GenBank文件中提取Features">从GenBank文件中提取Features</a></li><li><a href="/post/fb68.html" rel="bookmark" title="使用EffectiveT3预测微生物中的III型分泌系统效应蛋白">使用EffectiveT3预测微生物中的III型分泌系统效应蛋白</a></li><li class="active"><a href="/post/c886.html" rel="bookmark" title="SignalP+TMHMM预测微生物分泌蛋白">SignalP+TMHMM预测微生物分泌蛋白</a></li><li><a href="/post/6a93.html" rel="bookmark" title="在FASTA文件中搜索完全匹配的短序列">在FASTA文件中搜索完全匹配的短序列</a></li><li><a href="/post/ea71.html" rel="bookmark" title="在Linux服务器中安装网页版Rstudio">在Linux服务器中安装网页版Rstudio</a></li><li><a href="/post/a713.html" rel="bookmark" title="R语言安装依赖包错误集锦">R语言安装依赖包错误集锦</a></li><li><a href="/post/d444.html" rel="bookmark" title="NCBI上传基因簇之tbl2asn的使用">NCBI上传基因簇之tbl2asn的使用</a></li><li><a href="/post/18ea.html" rel="bookmark" title="利用NCycDB数据库从宏基因组中预测氮循环基因">利用NCycDB数据库从宏基因组中预测氮循环基因</a></li><li><a href="/post/36cc.html" rel="bookmark" title="R语言绘制分组条形图">R语言绘制分组条形图</a></li><li><a href="/post/1551.html" rel="bookmark" title="宏病毒组分析流程1-VirSorter2">宏病毒组分析流程1-VirSorter2</a></li><li><a href="/post/8fb3.html" rel="bookmark" title="利用GTDB-TK对细菌和古菌基因组进行物种分类">利用GTDB-TK对细菌和古菌基因组进行物种分类</a></li><li><a href="/post/85d7.html" rel="bookmark" title="计算蛋白质等电点并绘制全局pI图">计算蛋白质等电点并绘制全局pI图</a></li><li><a href="/post/92eb.html" rel="bookmark" title="使用DeepARG预测抗生素抗性基因ARGs">使用DeepARG预测抗生素抗性基因ARGs</a></li><li><a href="/post/74ad.html" rel="bookmark" title="Nanopore基因组组装">Nanopore基因组组装</a></li><li><a href="/post/2581.html" rel="bookmark" title="使用eggNOG-mapper注释基因组">使用eggNOG-mapper注释基因组</a></li><li><a href="/post/d862.html" rel="bookmark" title="PGCGAP - the Prokaryotic Genomics and Comparative Genomics Analysis Pipeline v1.0.33">PGCGAP - the Prokaryotic Genomics and Comparative Genomics Analysis Pipeline v1.0.33</a></li><li><a href="/post/e6ae.html" rel="bookmark" title="利用PGCGAP根据ids提取序列信息">利用PGCGAP根据ids提取序列信息</a></li><li><a href="/post/213.html" rel="bookmark" title="多种方法批量下载NCBI基因组">多种方法批量下载NCBI基因组</a></li><li><a href="/post/33b.html" rel="bookmark" title="代谢组相关软件的安装及使用">代谢组相关软件的安装及使用</a></li><li><a href="/post/377e.html" rel="bookmark" title="使用xcms3处理和分析LC-MS数据">使用xcms3处理和分析LC-MS数据</a></li><li><a href="/post/df57.html" rel="bookmark" title="用metid构建代谢组数据库">用metid构建代谢组数据库</a></li><li><a href="/post/0.html" rel="bookmark" title="基于TidyMass的非靶向代谢组学分析">基于TidyMass的非靶向代谢组学分析</a></li><li><a href="/post/29bf.html" rel="bookmark" title="批量下载某研究方向重要文献">批量下载某研究方向重要文献</a></li><li><a href="/post/c617.html" rel="bookmark" title="16S扩增子测序及宏基因组测序">16S扩增子测序及宏基因组测序</a></li><li><a href="/post/1177.html" rel="bookmark" title="用MaAsLin2包做微生物组多变量线性模型关联分析">用MaAsLin2包做微生物组多变量线性模型关联分析</a></li><li><a href="/post/7449.html" rel="bookmark" title="NCBI上传基因簇之table2asn的使用">NCBI上传基因簇之table2asn的使用</a></li></ul></div><div class="overview panel" data-title="Overview"><div class="author" itemprop="author" itemscope itemtype="http://schema.org/Person"><img class="image" itemprop="image" alt="Hualin Liu" data-src="/images/head.jpg"><p class="name" itemprop="name">Hualin Liu</p><div class="description" itemprop="description">分享微生物生物信息学分析方法，欢迎加入QQ群交流945751012，不接受群内广告！</div></div><nav class="state"><div class="item posts"><a href="/archives/"><span class="count">130</span> <span class="name">posts</span></a></div><div class="item categories"><a href="/categories/"><span class="count">12</span> <span class="name">categories</span></a></div><div class="item tags"><a href="/tags/"><span class="count">54</span> <span class="name">tags</span></a></div></nav><div class="social"><span class="exturl item github" data-url="aHR0cDovL2dpdGh1Yi5jb20vbGlhb2NoZW5sYW5ydW8=" title="http:&#x2F;&#x2F;github.com&#x2F;liaochenlanruo"><i class="ic i-github"></i></span> <span class="exturl item zhihu" data-url="aHR0cHM6Ly93d3cuemhpaHUuY29tL3Blb3BsZS9zdWFuLWxhLW1pYW4tcGlhbi10YW5nLWNpdW0=" title="https:&#x2F;&#x2F;www.zhihu.com&#x2F;people&#x2F;suan-la-mian-pian-tang-cium"><i class="ic i-zhihu"></i></span> <span class="exturl item weibo" data-url="aHR0cHM6Ly93ZWliby5jb20vdS8yNzE1MjEwOTIz" title="https:&#x2F;&#x2F;weibo.com&#x2F;u&#x2F;2715210923"><i class="ic i-weibo"></i></span> <span class="exturl item about" data-url="aHR0cHM6Ly93d3cubGlhb2NoZW5sYW5ydW8uZnVuL2Fib3V0" title="https:&#x2F;&#x2F;www.liaochenlanruo.fun&#x2F;about"><i class="ic i-address-card"></i></span> <span class="exturl item email" data-url="bWFpbHRvOmxpYW9jaGVubGFucnVvQHdlYm1haWwuaHphdS5lZHUuY24=" title="mailto:liaochenlanruo@webmail.hzau.edu.cn"><i class="ic i-envelope"></i></span> <span class="exturl item douban" data-url="aHR0cHM6Ly93d3cuZG91YmFuLmNvbS9wZW9wbGUvbGlhb2NoZW5sYW5ydW8vP19pPTczNDYxMjVRalo1QjZWLw==" title="https:&#x2F;&#x2F;www.douban.com&#x2F;people&#x2F;liaochenlanruo&#x2F;?_i&#x3D;7346125QjZ5B6V&#x2F;"><i class="ic i-douban"></i></span> <span class="exturl item google" data-url="aHR0cHM6Ly9zY2hvbGFyLmdvb2dsZS5jby5qcC9jaXRhdGlvbnM/dXNlcj1YYW9STk1RQUFBQUomaGw9amE=" title="https:&#x2F;&#x2F;scholar.google.co.jp&#x2F;citations?user&#x3D;XaoRNMQAAAAJ&amp;hl&#x3D;ja"><i class="ic i-google"></i></span></div><ul class="menu"><li class="item"><a href="/" rel="section"><i class="ic i-home"></i>Home</a></li><li class="item dropdown"><a href="javascript:void(0);"><i class="ic i-user"></i>About</a><ul class="submenu"><li class="item"><a href="/about/" rel="section"><i class="ic i-user"></i>About me</a></li><li class="item"><a href="/comment/" rel="section"><i class="ic i-envelope"></i>Comment</a></li></ul></li><li class="item dropdown"><a href="javascript:void(0);"><i class="ic i-feather"></i>Posts</a><ul class="submenu"><li class="item"><a href="/archives/" rel="section"><i class="ic i-list-alt"></i>Archives</a></li><li class="item"><a href="/categories/" rel="section"><i class="ic i-th"></i>Categories</a></li><li class="item"><a href="/tags/" rel="section"><i class="ic i-tags"></i>Tags</a></li></ul></li><li class="item dropdown"><a href="javascript:void(0);"><i class="ic i-list-ol"></i>List</a><ul class="submenu"><li class="item"><a href="/photos/" rel="section"><i class="ic i-person"></i>Photos</a></li><li class="item"><a href="/skip/gallery/" rel="section"><i class="ic i-cloud"></i>Gallery</a></li><li class="item"><a href="/skip/box/" rel="section"><i class="ic i-magic"></i>Box</a></li><li class="item"><span class="exturl" data-url="aHR0cHM6Ly9saWFvY2hlbmxhbnJ1by5mdW4vcmVmZXJlbmNlLw=="><i class="ic i-th"></i>cheatsheets</span></li></ul></li><li class="item"><a href="/donate/" rel="section"><i class="ic i-coffee"></i>Donate</a></li><li class="item"><a href="/friends/" rel="section"><i class="ic i-heart"></i>Friends</a></li><li class="item"><span class="exturl" data-url="aHR0cHM6Ly9saWFvY2hlbmxhbnJ1by5naXRodWIuaW8="><i class="ic i-external-link-alt"></i>中文版</span></li><li class="item"><span class="exturl" data-url="aHR0cHM6Ly90cmF2ZWxsaW5ncy5saW5r"><i class="ic i-forward"></i>Travelling</span></li></ul></div></div></div><ul id="quick"><li class="prev pjax"><a href="/post/fb68.html" rel="prev" title="Previous Post"><i class="ic i-chevron-left"></i></a></li><li class="up"><i class="ic i-arrow-up"></i></li><li class="down"><i class="ic i-arrow-down"></i></li><li class="next pjax"><a href="/post/e5ab.html" rel="next" title="Next Post"><i class="ic i-chevron-right"></i></a></li><li class="percent"></li></ul></div></div><div class="dimmer"></div></div></main><footer id="footer"><div class="inner"><div class="widgets"></div><div class="status"><div class="copyright">&copy; 2018 – <span itemprop="copyrightYear">2024</span> <span class="with-love"><i class="ic i-sakura rotate"></i> </span><span class="author" itemprop="copyrightHolder">Hualin Liu @ ResearchGo</span></div><div class="count"><span class="post-meta-item-icon"><i class="ic i-chart-area"></i> </span><span title="Symbols count total">788k words</span> <span class="post-meta-divider">|</span> <span class="post-meta-item-icon"><i class="ic i-coffee"></i> </span><span title="Reading time total">11:57</span><script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script><span class="post-meta-divider">|</span> <span class="post-meta-item-icon"><i class="ic i-info-circle"></i> </span><span style="padding-left:1px"><span id="busuanzi_container_site_pv">Total visits: <span id="busuanzi_value_site_pv" style="color:#f99"></span> times</span> <span class="post-meta-divider">|</span> <span class="post-meta-item-icon"><i class="ic i-user"></i> </span><span style="padding-left:1px"><span id="busuanzi_container_site_uv">Total visitors: <span id="busuanzi_value_site_uv" style="color:#f99"></span> people</span></span></span></div><div class="powered-by">Powered by <span class="exturl" data-url="aHR0cHM6Ly9oZXhvLmlv">Hexo</span> & Theme.<span class="exturl" data-url="aHR0cHM6Ly9naXRodWIuY29tL2FtZWhpbWUvaGV4by10aGVtZS1zaG9rYQ==">Shoka</span></div></div></div></footer></div><script data-config type="text/javascript">var LOCAL={path:"post/c886.html",favicon:{show:"（●´3｀●）Goooood",hide:"(´Д｀)Booooom"},search:{placeholder:"Search for Posts",empty:"We didn't find any results for the search: ${query}",stats:"${hits} results found in ${time} ms"},valine:!0,fancybox:!0,copyright:'Copied to clipboard successfully! <br> All articles in this blog are licensed under <i class="ic i-creative-commons"></i>BY-NC-SA.',ignores:[function(e){return e.includes("#")},function(e){return new RegExp(LOCAL.path+"$").test(e)}]}</script><script src="https://cdn.polyfill.io/v2/polyfill.js"></script><script src="//cdn.jsdelivr.net/combine/npm/pace-js@1.0.2/pace.min.js,npm/pjax@0.2.8/pjax.min.js,npm/whatwg-fetch@3.4.0/dist/fetch.umd.min.js,npm/animejs@3.2.0/lib/anime.min.js,npm/algoliasearch@4/dist/algoliasearch-lite.umd.js,npm/instantsearch.js@4/dist/instantsearch.production.min.js,npm/lozad@1/dist/lozad.min.js,npm/quicklink@2/dist/quicklink.umd.js"></script><script src="/js/app.js?v=0.2.5"></script><script data-pjax>var _hmt=_hmt||[];!function(){var e=document.createElement("script");e.src="https://hm.baidu.com/hm.js?d211830a796ceefb38a141fde14e4d5a";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)}()</script></body></html>